package com.gz.springcloud.controller;

import com.gz.springcloud.entity.Order;
import com.gz.springcloud.entity.Result;
import com.gz.springcloud.service.OrderService;
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;


@RestController
public class OrderController {

    @Resource
    private OrderService orderService;

    /**
     * 简单回顾
     * 1. 前端如果是以json格式来发送添加信息Order， 那么我们需要使用@RequestBody
     *     才能将数据封装到对应的bean, 同时保证http的请求头的 content-type是对应
     * 2. 如果前端是以表单形式提交了，则不需要使用@RequestBody, 才会进行对象参数封装, 同时保证
     *      http的请求头的 content-type是对应
     */
    @GetMapping("/order/save")
    // @GlobalTransactional(name = "gz-save-order",rollbackFor = Exception.class)
    //name = "gz-save-order"自己制定
    //rollbackFor = Exception.class 指定出现什么错误就回滚
    //比如openfeign默认超时是1s,可以自己制定哪一个服务超时，然后测试
    //注意@GlobalTransactional的int timeoutMills() default 60000;
    //即全局事务限制时间60s,超过这个时间全局回滚
    @GlobalTransactional(name = "gz-save-order",rollbackFor = Exception.class)
    public Result save(Order order) {
        orderService.save(order);
        return Result.success("订单创建成功", null);
    }
}
